package org.xpandaframework.base.curd;

import org.xpandaframework.base.curd.impl.BaseEntity;
import org.xpandaframework.base.exception.BaseDaoException;

/**
 * <p>
 * CopyRright (c)2008-2014: Camelot
 * <p>
 * Project: xpandaframework Maven Webapp
 * <p>
 * Module ID: <模块类编号可以引用系统设计中的类编号>
 * <p>
 * Comments: 持久层接口
 * <p>
 * JDK version used: JDK1.7
 * <p>
 * NameSpace: org.xpandaframework.base.curd.BaseDao.java
 * <p>
 * Author: Angus
 * <p>
 * Create Date: 2014-11-22
 * <p>
 * Modified By: <修改人中文名或拼音缩写>
 * <p>
 * Modified Date: <修改日期>
 * <p>
 * Why & What is modified: <修改原因描述>
 * <p>
 * Version: v1.0
 */
public interface BaseDao<T extends BaseEntity> {

  /**
   * 新增对象
   * 
   * @param t
   *          被新增的对象
   * @return T 被保存的完整对象
   * @throws BaseDaoException
   */
  public T create(T t) throws BaseDaoException;

  /**
   * 根据ID更新一条数据
   *
   * @param t
   *          被更新的对象
   * @return int 更新数据条数
   * @throws BaseDaoException
   */
  public int updateById(T t) throws BaseDaoException;

  /**
   * 根据Id查询一条数据
   *
   * @param id
   * @return T
   * @throws BaseDaoException
   */
  public T readOneById(Object id) throws BaseDaoException;

  /**
   * 根据ID删除一条数据
   *
   * @param id
   * @return int
   * @throws BaseDaoException
   */
  public int delOneById(Object id) throws BaseDaoException;

  /***********************************************************************
   * 8/
   * /**
   * 新增(不会将序列生成的ID,注入)
   * 效率较save(T t)高
   * 
   * @param t
   */
  // void create(T t);

  /**
   * 批量新增(不会将序列生成的ID,注入)
   * 效率较saveOfBatch(List<T> tList)高
   * 
   * @param tList
   */
  // void createOfBatch(List<T> tList);

  /**
   * 新增(会将序列生成的ID,注入)
   * 
   * @param t
   */
  // void save(T t);

  /**
   * 批量新增(会将序列生成的ID,注入)
   * 
   * @param tList
   */
  // void saveOfBatch(List<T> tList);

  /**
   * 根据ID进行删除
   * 
   * @param id
   */
  // void removeById(PK id);

  /**
   * 根据ids进行批量删除
   * 
   * @param ids
   */
  // void removeOfBatch(List<PK> ids);

  // void removeAll();

  /**
   * 更新,字段为空，则不进行更新
   * 
   * @param t
   */
  // void modify(T t);

  /**
   * 批量更新
   * 
   * @param tList
   */
  // void modifyOfBatch(List<T> tList);

  /**
   * 根据ID获取对象
   * 
   * @param id
   * @return
   */
  // T findOneById(PK id);

  /**
   * 获取所有的对象
   * 
   * @return List<T>
   * @throws Exception
   */
  // List<T> findAll();

  /**
   * 获取记录数
   * 
   * @return
   */
  // Long findAllCount();

}
